package com.qf.controller;

import com.qf.service.SmsInterfaceService;
import com.qf.vo.SmsInterface;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lenovo
 * @version V1.0
 * @Date 2021/11/22 11:19
 */
@RestController
@RequestMapping("/sms")
public class SmsController {

    /**
     * nginx代理的ip头
     */
    @Value("${ip-header}")
    private String ipHeader;

    @Autowired
    private SmsInterfaceService smsInterfaceService;

    /**
     * 接收用户方项目，发送的短信数据
     * @return
     */
    @PostMapping("/smsInterface")
    public Map<String,String> smsInterface0(SmsInterface sms,HttpServletRequest request){
        //1.判断客户传入的短信对象中的所有属性是否为空
        Map<String, String> resultMap = isEmpty(sms);

        //2.如果有短信对象中的属性为空，返回对应的提示信息
        if (resultMap.size() > 0){
            return resultMap;
        }

        //3.获取用户服务器ip地址（包括使用与不适用负载均衡器都要获取，）填充到短信对象中
        String ip = getRealIp(request);
        sms.setIp(ip);

        //4.调用service进行进一步对短信对象中的属性进行校验
        resultMap = smsInterfaceService.checkSms(sms);

        //5.返回短信发送成功信息
        return resultMap;

    }

    /**
     * 用于判断短信对象接收的数据是否为空
     * @return
     */
    private Map<String,String> isEmpty(SmsInterface sms){
        //返回的提示信息
        HashMap<String,String> resultMap = new HashMap<>();

        if (sms.getClientID() == null || sms.getClientID() == 0){
            resultMap.put("code", "101");
            resultMap.put("msg", "认证错：clientId为空");
        }
        if (StringUtils.isEmpty(sms.getPwd())){
            resultMap.put("code", "102");
            resultMap.put("msg", "密码为空");
        }
        if (StringUtils.isEmpty(sms.getContent())||sms.getContent().length() > 500){
            resultMap.put("code", "104");
            resultMap.put("msg", "消息长度错，为空或超长（目前定为500个字）");
        }
        if (StringUtils.isEmpty(sms.getMobile())){
            resultMap.put("code", "105");
            resultMap.put("msg", "手机号为空");
        }
        if (StringUtils.isEmpty(sms.getSrcID())){
            resultMap.put("code", "106");
            resultMap.put("msg", "下行编号（srcID）为空");
        }

        return resultMap;
    }

    /**
     * 获取请求的ip地址
     * @param request
     * @return
     */
    public String getRealIp(HttpServletRequest request){
        //获取被Nginxdialing的Ip地址
        if (!StringUtils.isEmpty(ipHeader) || ipHeader.length() > 0){
            String[] ipHeads = ipHeader.split(",");
            for (String ipHead : ipHeads) {
                String ip = request.getHeader(ipHead);
                if (!StringUtils.isEmpty(ip)){
                    return ip;
                }
            }
        }

        //获取没有被Nginx代理的IP地址
        return request.getRemoteAddr();
    }
}
